Что-бы закончить с blob-aми , деревьями и коммитами надо разобраться как git генерирует имена файлам и как хранит все версии всех файлов.
Название git файла определяется следующим образом:
tree #{text.lenght}\0
Общее правило: тип файла => решетка => длина текста => нулевой байт.
Это наш хедер.
Что-бы получить название файла: Добавляем к хедеру текст файла и берем SHA1 сумму от результата.
Текст файла git сжимает через zlib.
Как это можно реализовать на python:
[1]: import hashlib In [2]: from hashlib import sha1 In [3]: sha = hashlib.sha1() In [4]: line = "developer tools test line" In [5]: header = f"blob {line.__len__()}\0" In [6]: content = (header + line).encode() In [7]: sha.update(content) In [8]: sha.hexdigest() Out[8]: '7f0571380d1f5e2a2fb13bb25eeefe5761895e7a' In [9]: import zlib In [10]: zlib.compress(content)
Первые два символа из 7f0571380d1f5e2a2fb13bb25eeefe5761895e7a пойдут как название директории, а остальные в название файла.
Резюме: Внутри git нет никакой магии, все данные весьма просто храняться и так-же просто используются.
Что-бы закончить с blob-aми , деревьями и коммитами надо разобраться как git генерирует имена файлам и как хранит все версии всех файлов.
Название git файла определяется следующим образом:
tree #{text.lenght}\0
Общее правило: тип файла => решетка => длина текста => нулевой байт.
Это наш хедер.
Что-бы получить название файла: Добавляем к хедеру текст файла и берем SHA1 сумму от результата.
Текст файла git сжимает через zlib.
Как это можно реализовать на python:
[1]: import hashlib In [2]: from hashlib import sha1 In [3]: sha = hashlib.sha1() In [4]: line = "developer tools test line" In [5]: header = f"blob {line.__len__()}\0" In [6]: content = (header + line).encode() In [7]: sha.update(content) In [8]: sha.hexdigest() Out[8]: '7f0571380d1f5e2a2fb13bb25eeefe5761895e7a' In [9]: import zlib In [10]: zlib.compress(content)
Первые два символа из 7f0571380d1f5e2a2fb13bb25eeefe5761895e7a пойдут как название директории, а остальные в название файла.
Резюме: Внутри git нет никакой магии, все данные весьма просто храняться и так-же просто используются.
The global forecast for the Asian markets is murky following recent volatility, with crude oil prices providing support in what has been an otherwise tough month. The European markets were down and the U.S. bourses were mixed and flat and the Asian markets figure to split the difference.The TSE finished modestly lower on Friday following losses from the financial shares and property stocks.For the day, the index sank 15.09 points or 0.49 percent to finish at 3,061.35 after trading between 3,057.84 and 3,089.78. Volume was 1.39 billion shares worth 1.30 billion Singapore dollars. There were 285 decliners and 184 gainers.
Telegram Auto-Delete Messages in Any Chat
Some messages aren’t supposed to last forever. There are some Telegram groups and conversations where it’s best if messages are automatically deleted in a day or a week. Here’s how to auto-delete messages in any Telegram chat. You can enable the auto-delete feature on a per-chat basis. It works for both one-on-one conversations and group chats. Previously, you needed to use the Secret Chat feature to automatically delete messages after a set time. At the time of writing, you can choose to automatically delete messages after a day or a week. Telegram starts the timer once they are sent, not after they are read. This won’t affect the messages that were sent before enabling the feature.